﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DominioSATT;
using RepositorioSATT.Conexiones;
using System.Data;

namespace RepositorioSATT
{
    public class AfiliadoCategoriaRepositorio : IAfiliadoCategoriaRepositorio, IMapeadorFila<AfiliadoCategoria>
    {
        protected Conexion conn;
        protected string sql = "";
        public AfiliadoCategoriaRepositorio()
        {
            conn = new Conexion();
        }
        #region Miembros de IAfiliadoCategoriaRepositorio

        public void Agregar(AfiliadoCategoria Objeto)
        {
            string Valores = Objeto.Afiliado.Dni + "," + Objeto.Categoria.Id + "," + Objeto.PartidosGanados + "," + Objeto.PartidosPerdidos + ",'" + Objeto.Estado + "'";
            conn.AgregarSinId("JugadorCategoria", "Dni, IdCategoria, PP, PG, Estado ", Valores);
        }

        public void Modificar(AfiliadoCategoria Objeto)
        {
            sql = " Update JugadorCategoria Set PP = " + Objeto.PartidosPerdidos + ", PG = " + Objeto.PartidosGanados + ", Estado = '" + Objeto.Estado + "'";
            conn.ActualizarOEliminar(sql);
        }

        public AfiliadoCategoria Buscar(int Dni, int IdCategoria)
        {
            sql = " Select * From JugadorCategoria Where Dni = " + Dni + " And IdCategoria = " + IdCategoria;
            DataRow Dr = conn.Buscar(sql);
            return MapearTabla(Dr);
        }

        /// <summary>
        /// Lista de Historial de Afiliados por Categoria
        /// </summary>
        /// <param name="IdCategoria">Id de la Categoria por la que se busca</param>
        /// <returns>Lista de Historial</returns>
        public List<AfiliadoCategoria> Listar(int IdCategoria)
        {
            sql = " Select * From JugadorCategoria Where IdCategoria = " + IdCategoria;
            DataTable Dt = conn.Listar(sql);
            List<AfiliadoCategoria> Lista = new List<AfiliadoCategoria>();
            foreach (DataRow Dr in Dt.Rows)
            {
                Lista.Add(MapearTabla(Dr));
            }
            return Lista;
        }

        #endregion

        #region Miembros de IMapeadorFila<AfiliadoCategoria>

        public AfiliadoCategoria MapearTabla(System.Data.DataRow fila)
        {
            AfiliadoCategoria Retorno = null;
            if (fila != null)
            {
                IPersonaRepositorio repoPersona = new PersonaRepositorio();
                Persona bPersona = repoPersona.Obtener(Convert.ToInt32(fila["Dni"]));
                ICategoriaRepositorio repoCategoria = new CategoriaRepositorio();
                Categoria bCategoria = repoCategoria.Obtener(Convert.ToInt32(fila["IdCategoria"]));
                Retorno = new AfiliadoCategoria(bPersona, bCategoria,
                    (fila.IsNull("PG") == true ? 0 : Convert.ToInt32(fila["PG"])),
                    (fila.IsNull("PP") == true ? 0 : Convert.ToInt32(fila["PP"])),
                    (fila.IsNull("Estado") == true ? false : Convert.ToBoolean(fila["Estado"])));
            }
            return Retorno;
        }

        #endregion
    }
}
